x11: Add back support for the damage extension
authorRay Strode <rstrode@redhat.com>
Wed, 27 May 2020 18:53:10 +0000 (14:53 -0400)
committerRay Strode <rstrode@redhat.com>
Fri, 5 Jun 2020 14:01:13 +0000 (10:01 -0400)
commit 14bf58ec5dfdf19e3ca603b977626608dafc729b dropped support
for using the DAMAGE extension since there was no code that
needed it.

We're going to need it again, however, to address an NVidia
vendor driver issue.

This commit does the plumbing to add it back.

config.h.meson
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkdisplay-x11.h
gdk/x11/meson.build
meson.build

index ee5ddbf7b3a1d4b5aaa951a6411da0724dae3a78..d8d5228693ff5f7a2f9118efc65de1dcf40dda31 100644 (file)
 /* Have the Xcursor library */
 #mesondefine HAVE_XCURSOR
 
+/* Have the XDAMAGE X extension */
+#mesondefine HAVE_XDAMAGE
+
 /* Have the XFIXES X extension */
 #mesondefine HAVE_XFIXES
 
index 700ffb2d2832ffda51418354b4d95ed0a6d2ea34..6acf25c37d29a749470d9c648c3dd0f91774c75b 100644 (file)
@@ -1603,6 +1603,14 @@ gdk_x11_display_open (const gchar *display_name)
   }
 #endif
 
+#ifdef HAVE_XDAMAGE
+  display_x11->have_damage = FALSE;
+  if (XDamageQueryExtension (display_x11->xdisplay,
+                             &display_x11->damage_event_base,
+                             &display_x11->damage_error_base))
+    display_x11->have_damage = TRUE;
+#endif
+
   display->clipboard = gdk_x11_clipboard_new (display, "CLIPBOARD");
   display->primary_clipboard = gdk_x11_clipboard_new (display, "PRIMARY");
 
index 272646b65f989917bb4df2ddce02cc5762ddbc3b..38ddda5d60a0f5f539fab3cb8ddc978c5388b71a 100644 (file)
@@ -149,6 +149,12 @@ struct _GdkX11Display
   guint has_glx_multisample : 1;
   guint has_glx_visual_rating : 1;
   guint has_glx_create_es2_context : 1;
+
+#ifdef HAVE_XDAMAGE
+  gint damage_event_base;
+  gint damage_error_base;
+  guint have_damage;
+#endif
 };
 
 struct _GdkX11DisplayClass
index c3f2c54b7313c8fc86e4b8653070d4d102329339..f846450c3bfa0910c06ca63fa23249198f5f75b2 100644 (file)
@@ -65,6 +65,7 @@ gdk_x11_deps = [
   xext_dep,
   x11_dep,
   xcursor_dep,
+  xdamage_dep,
   xfixes_dep,
   xcomposite_dep,
   xrandr_dep,
index 92951636034052559d2d04153a870ce9790ba996..a8a3c7cdbec749bbfa99ebc18f9425008a622a4d 100644 (file)
@@ -501,6 +501,7 @@ if x11_enabled
   xi_dep         = dependency('xi')
   xext_dep       = dependency('xext')
   xcursor_dep    = dependency('xcursor', required: false)
+  xdamage_dep    = dependency('xdamage', required: false)
   xfixes_dep     = dependency('xfixes', required: false)
   xcomposite_dep = dependency('xcomposite', required: false)
   fontconfig_dep = dependency('fontconfig')
@@ -513,6 +514,9 @@ if x11_enabled
   if xcursor_dep.found()
     x11_pkgs += ['xcursor']
   endif
+  if xdamage_dep.found()
+    x11_pkgs += ['xdamage']
+  endif
   if xfixes_dep.found()
     x11_pkgs += ['xfixes']
   endif
@@ -523,6 +527,7 @@ if x11_enabled
   atk_pkgs += ['atk-bridge-2.0']
 
   cdata.set('HAVE_XCURSOR', xcursor_dep.found())
+  cdata.set('HAVE_XDAMAGE', xdamage_dep.found())
   cdata.set('HAVE_XCOMPOSITE', xcomposite_dep.found())
   cdata.set('HAVE_XFIXES', xfixes_dep.found())